package br.unifor.ads.pjappfinanceiro.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import br.unifor.ads.pjappfinanceiro.entity.Clientes;
import br.unifor.ads.pjappfinanceiro.entity.Fornecedores;

public class FornecedoresDAO {

	private EntityManager em = new EntityManager() {

		@Override
		public Object trataResultSet(ResultSet resultSet) throws SQLException {
			Fornecedores fornecedor = new Fornecedores();
			fornecedor.setId(resultSet.getInt("id_for"));
			fornecedor.setNome(resultSet.getString("nome_for"));
			fornecedor.setEndereco(resultSet.getString("endereco_for"));
			fornecedor.setCep(resultSet.getString("cep_for"));
			fornecedor.setBairro(resultSet.getString("bairro_for"));
			fornecedor.setCidade(resultSet.getString("cidade_for"));
			fornecedor.setEstado(resultSet.getString("estado_for"));
			fornecedor.setFone(resultSet.getString("fone_for"));
			fornecedor.setFax(resultSet.getString("fax_for"));
			fornecedor.setCnpj(resultSet.getString("cnpj_for"));
			fornecedor.setInscEst(resultSet.getString("inscest_for"));
			fornecedor.setEmail(resultSet.getString("email_for"));
			fornecedor.setBanco(resultSet.getString("banco_for"));
			fornecedor.setAgencia(resultSet.getString("agencia_for"));
			fornecedor.setConta(resultSet.getString("conta_for"));
			return fornecedor;
		}
	};

	public Fornecedores salvar(Fornecedores fornecedor) throws SQLException {

		String sql = "insert into tb_fornecedor(nome_for, endereco_for, "
				+ "cep_for, bairro_for, cidade_for, estado_for, fone_for, fax_for, "
				+ "cnpj_for, inscest_for, email_for, banco_for, agencia_for, conta_for) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
				+ " returning id_for, nome_for, endereco_for, "
				+ "cep_for, bairro_for, cidade_for, estado_for, fone_for, fax_for, "
				+ "cnpj_for, inscest_for, email_for, banco_for, agencia_for, conta_for ";
		
		return (Fornecedores)em.getSingleResult(sql, fornecedor.getNome(), fornecedor.getEndereco(),
				fornecedor.getCep(), fornecedor.getBairro(), fornecedor.getCidade(), fornecedor.getEstado(),
				fornecedor.getFone(), fornecedor.getFax(), fornecedor.getCnpj(), fornecedor.getInscEst(),
				fornecedor.getEmail(), fornecedor.getBanco(), fornecedor.getAgencia(), fornecedor.getConta());
	}

	public void atualizar(Fornecedores fornecedor) throws SQLException {

		String sql = "update tb_fornecedor set nome_for = ?, endereco_for = ?, "
				+ "cep_for = ?, bairro_for = ?, cidade_for = ?, estado_for = ?, fone_for = ?, fax_for = ?, "
				+ "cnpj_for = ?, inscest_for = ?, email_for = ?, banco_for = ?, agencia_for = ?, conta_for = ? where id_for = ?";
		em.executeQuery(sql, fornecedor.getNome(), fornecedor.getEndereco(),
				fornecedor.getCep(), fornecedor.getBairro(), fornecedor.getCidade(), fornecedor.getEstado(),
				fornecedor.getFone(), fornecedor.getFax(), fornecedor.getCnpj(), fornecedor.getInscEst(),
				fornecedor.getEmail(), fornecedor.getBanco(), fornecedor.getAgencia(), fornecedor.getConta(), fornecedor.getId());

	}

	public void excluirPorId(Integer id) throws SQLException {
		String sql = "delete from tb_fornecedor where id_for = ?";
		em.executeQuery(sql, id);
	}

	public void excluirTodos() throws SQLException {

		String sql = "delete from tb_fornecedor";
		em.executeQuery(sql);
	}

	public Fornecedores buscarPorId(Integer id) throws SQLException {

		String sql = "select id_for, nome_for, endereco_for, "
				+ "cep_for, bairro_for, cidade_for, estado_for, fone_for, fax_for, "
				+ "cnpj_for, inscest_for, email_for, banco_for, agencia_for, conta_for "
				+ "from tb_fornecedor where id_for = ?";
		return (Fornecedores) em.getSingleResult(sql, id);
	}
	
	public Fornecedores buscarPorCNPJ(String cnpj) throws SQLException {

		String sql = "select id_for, nome_for, endereco_for, "
				+ "cep_for, bairro_for, cidade_for, estado_for, fone_for, fax_for, "
				+ "cnpj_for, inscest_for, email_for, banco_for, agencia_for, conta_for "
				+ "from tb_fornecedor where cnpj_for = ?";
		return (Fornecedores) em.getSingleResult(sql, cnpj);
	}
	

	@SuppressWarnings("unchecked")
	public List<Fornecedores> buscarTodos() throws SQLException {
		String sql = "select nome_for, endereco_for, "
				+ "cep_for, bairro_for, cidade_for, estado_for, fone_for, fax_for, "
				+ "cnpj_for, inscest_for, email_for, banco_for, agencia_for, conta_for from tb_fornecedor";
		return (List<Fornecedores>) em.getResultList(sql);
	}

}
